package setOfCollectionDemo.hashDemo;
/*

HashSet:存取无序,无索引,无重复,通过重写hashCode()和equals()方法,实现去重
        os:如果不重写hashCode()和equals()方法,可以存重复的
        底层原理:哈希表,实际上是数组+链表+红黑树(jdk8后)的结合
        简单描述过程:创建一个长度为16,存储null的数组,根据返回值"元素的哈希值%数组长度(16)"获取位置,
            如果位置为null,将元素存储进数组.否则调用equals(),比较内容,相同不存,不相同则挂在元素下方
        具体实现:1.直接获取的哈希值作运算,可能出现大量数据挂在一个数组节点下方,需要进行特殊处理:
                        特殊处理:原哈希值^原哈希值向右移位动16位(哈希扰动)
                 2.代码中不是使用%运算,而是(数组长度-1)&返回哈希值,虽然结果一样,但后者运算更快
    问题:尽管对返回的哈希值进行特殊处理,但还是存在不同元素哈希值相同情况,该怎么提高查询性能?
         1.数组扩容
         2.链表转红黑树
     存储元素到达12{ a.链表挂载的元素<=8,数组扩容为2倍
                   b.链表挂载元素>8{ a.数组长度<64,扩容
                                   b.数组长度>=64,链表转红黑树
                   }}



 */
public class HashDemo {
}
